热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

NLP|一文完全搞懂序列标注算法

序列标注模型用到了长短期记忆网络(LSTM),条件随机场(CRF),Highway网络,本文循序渐进的介绍了序列标注算法,Bepatience!跟

序列标注模型用到了长短期记忆网络(LSTM),条件随机场(CRF),Highway网络,本文循序渐进的介绍了序列标注算法,Be patience ! 跟着小编的文章完全搞懂序列标注算法吧。

1.目标

序列标注模型的目标是用实体或词性标记句子的每个单词,如下图:

其中PER标记的是人名,LOC标记的是位置,ORG标记的是组织。

算法原理来自论文Empower Sequence Labeling with Task-Aware Neural Language Model,论文所述的序列标注模型算法比大部分算法都要高级,文章将要介绍很多常用的理论,不仅仅应用在序列标注领域,该模型的一个特点是并行训练了语言模型,增强了序列标注的任务。

为了更好的理解序列标注模型,首先介绍几个概念:

2.需要理解的几个概念

  • 序列标注:标注句子中每个单词的实体或词性

  • 语言模型:语言模型是预测单词或字符序列中的下一个单词或字符,神经语言模型在文本生成、机器翻译、图像理解、光学字符识别等各种NLP任务中取得了令人印象深刻的结果。

  • 字符RNN:对文本中的单个字符进行RNN转换,在序列标注任务中,字符可以为单词的实体或属性提供重要线索,如形容词通常以”-y”或”-ul”结尾,位置通常以”-land”或”burg”结尾,因此编码句子中的字符信息是很有必要的。

  • 多任务学习(Multi-Task Learning):模型训练过程中包含了语言模型,语言模型为序列标注模型提供了额外的有用信息,即改善了序列标注模型。

  • 条件随机场(Conditional Random Fields):离散分类器根据某个单词预测其标注,条件随机场是根据该单词附近的单词标注来预测其标注,这是符合理论的,因为单词的标注不仅仅取决于当前的单词,还取决于该单词相邻的单词属性。

  • 维特比解码(Viterbi Decoding):我们使用了CRF输出每个单词的标记转移矩阵,然后通过维特比解码输出最优的标记序列。

  • Highway Networks(Highway网络):全连接层在任何神经网络结构中转换或提取不同位置特征的主要成分,如图像分类中,全连接层输出用于分类图像的特征,语言模型中,全连接层输出每一个类的概率。

3.算法模型框架

算法模型框架即LM-LSTM-CRF,LM-LSTM-CRF包含了三个模型:语言模型(LM),长短期记忆网络(LSTM),条件随机场(CRF)。语言模型的训练并行在长短期记忆网络和条件随机场组成的序列标记模型,组成多任务训练模型。

模型框架如下图:

上图右边的红色方框所展示的是序列标注模型的框架流程,下图细化了该模型流程,让大家有个宏观的理解:

下面一一介绍该模型框架的结构部分:

3.1 多任务学习(Multi -Task Learning)

由上表可知,在训练序列标注模型的同时也并行了语言模型训练,这样做的好处是使训练过程中获得了更多的信息,提高了序列标注模型的性能。

多任务学习的损失函数是各个任务损失函数的权值相加,如下式:

本文设置等于1。

梯度下降法更新模型参数:

其中为学习率。

3.2 字符LSTM

前向字符LSTM和后向字符LSTM都用于语言模型的单词预测,也用于序列标注模型的输入。

假设句子是dunston checks in ,前向字符LSTM的结构如下图:

后向字符LSTM结构图:

3.3 单词双向LSTM和条件随机场

单词双向LSTM和条件随机场用来预测序列标注模型每个单词的观测分数矩阵和转移分数矩阵之和。如下图:

若句子长度为L,单词标注种类数为m,那么每个单词标注转移分数矩阵的大小为(L,m,m),观测分数矩阵的大小为(L,m)。

条件随机场输出这两者之和的总分数,矩阵大小为(L,m,m),位置(k,i,j)的值等于

第k个单词第j个标记的观测分数与第k个单词前一个单词标注为i,后一个单词标注为j的观测分数之和。

比如句子dunston checks in ,如果标注种类数为5,总分数矩阵会是这样:

细心的读者可能发现,条件随机场不输出符号的总分数,因为每个句子都是以开头,计算的观测分数和转移分数没有任何意义。

从上图也得到了两个小细节:

  • 给定前一个单词的标注为,某个标注的转移分数表示该标注成为句子中第一个标注的可能性,比如句子通常以冠词(a,an,the)或名词,代词开头。

  • 给定后一个单词的标注为,某个标注的转移分数表示该标注成为句子中最后一个标注的可能性。

我们现在知道了模型输出的矩阵总分数,如何计算当前模型的损失函数?

4.维特比损失(Viterbi loss)

若仅仅只有标注观测分数,那么小编推荐使用交叉熵损失函数去计算,若包含了转移矩阵分数,则用维特比损失算法。

还是用之前的总分数为例,如下图:

定义序列标注t的得分等于每个标注得分的总和,有:

若句子的真实标注为:tag2,tag3,tag3,,则该序列标注的得分等于:4.85 + 6.79 + 3.85 +3.52 = 19.01。

因此,维特比损失定义为:

其中表示真实的标注序列,T表示所有可能的标注序列。

简化上式得:

若经过多次迭代的反馈训练,得到单词最终的预测总分数,如何预测句子中最优的标注序列?

5.维特比解码(Viterbi Decoding

不管是什么句子,有两个标注我们是确定的:标记,维特比预测最优标注序列的思想是:通过去逐步累加每个单词的总分数,当更新到标注时,由于标注是确定的,然后通过标注的总分数反向预测每个单词的最优序列。

通过一个来阐述这一思想,还是用之前每个单词的总分数为例:

第一个单词为dunston,前一个标注肯定为,于是第一个单词的累加分数为:

第二个单词为checks,则第二个单词的累加分数为:

存储该单词所属每个标注的最大分数和前一个标注:

第三个单词为in,则第三个单词的累加分数为:

存储该单词所属每个标注的最大分数和前一个标注:

第四个单词为符号,则第四个单词的累加分数为:

存储该单词所属每个标注的最大分数和前一个标注:

因为第四个单词为标注肯定为,因此选择该标注最大分数时的前一个标注,由上图可知为tag3,然后重复该步骤,如下图:

由上图可知,最优标注序列为:

5.Highway Networks

语言模型和序列标注模型都用到了highway网络,该网络与偏差网络有点相似,偏差网络(residual networks)的输出等于将输入添加到转换后的输出,为数据流的转换创建路径。

偏差网络结构图:

若转换层个数等于1,转换函数为f(x),则有:

Highway网络与偏差网络有点相似,它使用sigmoid-activated门来确定输入和转换后输出的系数,因此Highway网络的输出为:

模型有三个地方要用到Highway网络:

  • Highway网络将前向字符LSTN的输出预测为下一个单词的分数

  • Highway网络将后向字符LSTN的输出预测为下一个单词的分数

  • 前向字符LSTM和后向字符LSTM的输出拼接起来,然后用Highway网络转换,并与单词的嵌入向量作为单词双向LSTM的输入。

结合字符前向LSTM,字符后向LSTM,双向单词LSTM以及条件随机场的介绍,序列标注算法模型结构图如下:

6.其他的序列标注模型简述

图(a)与本文介绍的模型很相似,但是该模型是单任务学习,即不包含语言模型。

图(b)是单任务学习,且没有利用句子的字符信息,该模型在工业界十分普及且性能较好。

图(c)是单任务学习,使用了线性层或Highway层代替条件随机场,即直接预测每个单词所属标记的分数,性能相比之前的模型较差。

7.总结

小编花了较长的时间来整理序列标注的算法,也尽可能的把模型的网络结构解释清楚,文章开头和末尾都涉及了算法的流程框架图,对于一个较复杂的模型,理解模型的流程框架是必要的。后面的文章会涉及该算法的代码,请持续关注小编吧!

参考

https://github.com/sgrvinod/a-PyTorch-Tutorial-to-Sequence-Labeling

获取参考文章pdf,可扫码添加小编微信获取:


推荐阅读
  • 本文探讨了图像标签的多种分类场景及其在以图搜图技术中的应用,涵盖了从基础理论到实际项目实施的全面解析。 ... [详细]
  • 利用Java与Tesseract-OCR实现数字识别
    本文深入探讨了如何利用Java语言结合Tesseract-OCR技术来实现图像中的数字识别功能,旨在为开发者提供详细的指导和实践案例。 ... [详细]
  • Coursera ML 机器学习
    2019独角兽企业重金招聘Python工程师标准线性回归算法计算过程CostFunction梯度下降算法多变量回归![选择特征](https:static.oschina.n ... [详细]
  • 李宏毅机器学习笔记:无监督学习之线性方法
    无监督学习主要涵盖两大类别:一是聚类与降维,旨在简化数据结构;二是生成模型,用于从编码生成新的数据样本。本文深入探讨了这些技术的具体应用和理论基础。 ... [详细]
  • 吴恩达推出TensorFlow实践课程,Python基础即可入门,四个月掌握核心技能
    量子位报道,deeplearning.ai最新发布了TensorFlow实践课程,适合希望使用TensorFlow开发AI应用的学习者。该课程涵盖机器学习模型构建、图像识别、自然语言处理及时间序列预测等多个方面。 ... [详细]
  • 本文详细介绍了福昕软件公司开发的Foxit PDF SDK ActiveX控件(版本5.20),并提供了关于其在64位Windows 7系统和Visual Studio 2013环境下的使用方法。该控件文件名为FoxitPDFSDKActiveX520_Std_x64.ocx,适用于集成PDF功能到应用程序中。 ... [详细]
  • 嵌入式开发环境搭建与文件传输指南
    本文详细介绍了如何为嵌入式应用开发搭建必要的软硬件环境,并提供了通过串口和网线两种方式将文件传输到开发板的具体步骤。适合Linux开发初学者参考。 ... [详细]
  • 本文总结了优化代码可读性的核心原则与技巧,通过合理的变量命名、函数和对象的结构化组织,以及遵循一致性等方法,帮助开发者编写更易读、维护性更高的代码。 ... [详细]
  • 本文回顾了2017年的转型和2018年的收获,分享了几家知名互联网公司提供的工作机会及面试体验。 ... [详细]
  • 本文详细介绍了如何使用 HTML 和 CSS 对文件上传按钮进行样式美化,使用户界面更加友好和美观。 ... [详细]
  • LambdaMART算法详解
    本文详细介绍了LambdaMART算法的背景、原理及其在信息检索中的应用。首先回顾了LambdaMART的发展历程,包括其前身RankNet和LambdaRank,然后深入探讨了LambdaMART如何结合梯度提升决策树(GBDT)和LambdaRank来优化排序问题。 ... [详细]
  • 本文档旨在帮助开发者回顾游戏开发中的人工智能技术,涵盖移动算法、群聚行为、路径规划、脚本AI、有限状态机、模糊逻辑、规则式AI、概率论与贝叶斯技术、神经网络及遗传算法等内容。 ... [详细]
  • 在Ubuntu 16.04中使用Anaconda安装TensorFlow
    本文详细介绍了如何在Ubuntu 16.04系统上通过Anaconda环境管理工具安装TensorFlow。首先,需要下载并安装Anaconda,然后配置环境变量以确保系统能够识别Anaconda命令。接着,创建一个特定的Python环境用于安装TensorFlow,并通过指定的镜像源加速安装过程。最后,通过一个简单的线性回归示例验证TensorFlow的安装是否成功。 ... [详细]
  • 强人工智能时代,区块链的角色与前景
    随着强人工智能的崛起,区块链技术在新的技术生态中扮演着怎样的角色?本文探讨了区块链与强人工智能之间的互补关系及其在未来技术发展中的重要性。 ... [详细]
  • 本文详细记录了作者从7月份的提前批到9、10月份正式批的秋招经历,包括各公司的面试流程、技术问题及HR面的常见问题。通过这次秋招,作者深刻体会到了技术积累和面试准备的重要性。 ... [详细]
author-avatar
xiaonq
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有